/**
 * 
 */
package vo;

import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;

import util.HibernateUtil;

/**
 * @author Saulo
 * 
 */
public class VendaDAO {

	// SALVAR VENDA
	@SuppressWarnings("unchecked")
	public void salvarVenda(VendaVO venda) {
		// boolean resposta = false;
		Transaction transaction = null;

		Session session = HibernateUtil.currentSession();
		transaction = session.beginTransaction();
		Criteria criteria;
		session.saveOrUpdate(venda);
		/**
		 * Pesquisar OS onde idOrdServ = venda.getOrdemServicoIdOrdServ()
		 */
		criteria = session.createCriteria(OrdemServicoVO.class).add(
				Restrictions.eq("idOrdServ", venda.getOrdemServicoIdOrdServ()));
		OrdemServicoVO ordemServico = (OrdemServicoVO) criteria.uniqueResult();

		/**
		 * pesquisar itemOs onde idItOrd = ordemServico.getIdOrdServ()
		 */
		criteria = session.createCriteria(ItemOrdemVO.class).add(
				Restrictions.eq("ordemServicoIdOrdServ", ordemServico.getIdOrdServ()));
		List<ItemOrdemVO> itemOrdem = criteria.list();

		for (ItemOrdemVO vo : itemOrdem) {
			/**
			 * pesquisar produto onde produto.id = os.idProduto
			 */
			criteria = session.createCriteria(ProdutoVO.class).add(
					Restrictions.eq("idProd", vo.getProdutoIdProd()));
			ProdutoVO produtoVO = (ProdutoVO) criteria.uniqueResult();

			/**
			 * pesquisar itemEstoque onde produto.id = itemEstoque.idProduto e
			 * alterar a quantidade do estoque
			 */
			criteria = session.createCriteria(ItemEstoqueVO.class).add(
					Restrictions.eq("produtoIdProd", produtoVO.getIdProd()));
			ItemEstoqueVO itemEstoqueVO = (ItemEstoqueVO) criteria
					.uniqueResult();

			int estoque = 0;
			estoque = (itemEstoqueVO.getQuantItEst() - vo.getQuantItOrd());
			// if (estoque < 0) {
			// resposta = false;
			// }
			itemEstoqueVO.setQuantItEst(estoque);

			session.update(itemEstoqueVO);

		}
		transaction.commit();
		// return resposta;
	}

	// EXCLUIR VENDA
	public void excluir(VendaVO vendaVO) {
		Transaction transaction = null;

		VendaVO venda = obter(vendaVO);

		Session session = HibernateUtil.currentSession();
		transaction = session.beginTransaction();

		session.delete(venda);

		transaction.commit();
	}

	// OBTER VENDA
	public VendaVO obter(VendaVO vendaVO) {
		Transaction transaction = null;

		Session session = HibernateUtil.currentSession();
		transaction = session.beginTransaction();

		Criteria criteria = session.createCriteria(VendaVO.class);
		criteria.add(Restrictions.eq("idVen", vendaVO));

		VendaVO venda = (VendaVO) criteria.uniqueResult();

		transaction.commit();

		return venda;
	}

	// CONSULTAR VENDAS
	@SuppressWarnings("unchecked")
	public List<VendaVO> consultarVendas(VendaVO vendaVO) {

		Transaction transaction = null;

		Session session = HibernateUtil.currentSession();
		transaction = session.beginTransaction();

		Criteria criteria = session.createCriteria(VendaVO.class);
		// criteria.add(Restrictions.eq("nomeProd", consProd));

		List<VendaVO> vendas = criteria.list();
		transaction.commit();

		return vendas;
	}
}
